﻿using System;
using System.Collections.Generic;
using System.Text;
using SistemaLib.sipe.db.sqlserver;
using SistemaLib.Entidades;
using SistemaLib.sipe.db.general;
using SistemaLib.sipe.util;
using System.Data;

namespace SistemaLib.Persistencia
{
    public class DbRecursoCalendario : DbBase
    {
        private void Agregar(RecursoCalendario cal)
        {
            DbScriptGenerator sql = new DbScriptGenerator();

            sql.Tabla = "RecursosHumanosCalendarios";
            sql.addCampo("idRH");
            sql.addCampo("fecha");
            sql.addCampo("horasLibres");


            DbParameterCollection col = new DbParameterCollection();
            col.Add(DbConnection.SqlInputParam("@idRH", DbTipo.Entero, 0, cal.IdRH));
            col.Add(DbConnection.SqlInputParam("@fecha", DbTipo.Fecha, 0, cal.Fecha));
            col.Add(DbConnection.SqlInputParam("@horasLibres", DbTipo.Float, 0, cal.HorasLibres));


            object id;
            this.DbConnection.RunScalarProcedure(sql.getInsert(), col, CommandType.Text, out id);

            cal.Id = int.Parse(id.ToString());
        }

        private void Modificar(RecursoCalendario cal)
        {
            DbScriptGenerator sql = new DbScriptGenerator();

            sql.Tabla = "RecursosHumanosCalendarios";
            sql.CampoClave = "id";
            sql.addCampo("idRH");
            sql.addCampo("fecha");
            sql.addCampo("horasLibres");


            DbParameterCollection col = new DbParameterCollection();
            col.Add(DbConnection.SqlInputParam("@id", DbTipo.Entero, 0, cal.Id));
            col.Add(DbConnection.SqlInputParam("@idRH", DbTipo.Entero, 0, cal.IdRH));
            col.Add(DbConnection.SqlInputParam("@fecha", DbTipo.Fecha, 0, cal.Fecha));
            col.Add(DbConnection.SqlInputParam("@horasLibres", DbTipo.Float, 0, cal.HorasLibres));


            object id;
            this.DbConnection.RunScalarProcedure(sql.getUpdate(), col, CommandType.Text, out id);
        }

        internal void Eliminar(int idCalendario)
        {
            string sql = "delete from RecursosHumanosCalendarios where id = @id";

            DbParameterCollection col = new DbParameterCollection();
            col.Add(DbConnection.SqlInputParam("@id", DbTipo.Entero, 0, idCalendario));

            int cant;
            this.DbConnection.RunNonQueryProcedure(sql, col, CommandType.Text, out cant);
        }

        internal void Guardar(RecursoCalendario cal)
        {
            if (cal.Id == 0)
                Agregar(cal);
            else
                Modificar(cal);
        }

        private void Cargar(DataRow fila, RecursoCalendario obj)
        {
            obj.Id = ObtieneCampo.TipoInt(fila, "id");
            obj.IdRH = ObtieneCampo.TipoInt(fila, "idRH");
            obj.Fecha = ObtieneCampo.TipoFecha(fila, "fecha");
            obj.HorasLibres = ObtieneCampo.TipoMoneda(fila, "horasLibres");
        }

        public RecursoCalendario CargarRecursoCalendarioPorId(int idTas)
        {
            RecursoCalendario obj = new RecursoCalendario();

            string sql = @"select * from RecursosHumanosCalendarios where id = @id";

            DataSet ds;

            DbParameterCollection col = new DbParameterCollection();
            col.Add(DbConnection.SqlInputParam("@id", DbTipo.Entero, 0, idTas));

            this.DbConnection.RunDataSetProcedure(sql, col, CommandType.Text, out ds);

            if (ds != null && ds.Tables[0].Rows.Count > 0)
            {
                DataRow fila = ds.Tables[0].Rows[0];
                Cargar(fila, obj);
            }

            return obj;
        }

        public List<RecursoCalendario> ListarRecursoCalendarioMensual(int idRH, int mes, int anio)
        {
            List<RecursoCalendario> lista = new List<RecursoCalendario>();
            
            string sql = @"select *  from RecursosHumanosCalendarios r where idRH = @idRH and month(fecha) = @mes and year(fecha) = @anio";

            DataSet ds;

            DbParameterCollection col = new DbParameterCollection();
            col.Add(DbConnection.SqlInputParam("@idRH", DbTipo.Entero, 0, idRH));
            col.Add(DbConnection.SqlInputParam("@mes", DbTipo.Entero, 0, mes));
            col.Add(DbConnection.SqlInputParam("@anio", DbTipo.Entero, 0, anio));

            this.DbConnection.RunDataSetProcedure(sql, col, CommandType.Text, out ds);

            if (ds != null && ds.Tables[0].Rows.Count > 0)
            {
                foreach (DataRow fila in ds.Tables[0].Rows)
                {
                    RecursoCalendario obj = new RecursoCalendario();
                    Cargar(fila, obj);
                    lista.Add(obj);
                }
            }

            return lista;
        }


        public RecursoCalendario CargarCalendarioRecurso(int idRH, DateTime fecha)
        {
            string sql = @"select * from RecursosHumanosCalendarios where idRH = @idRH and fecha = @fecha";

            DataSet ds;

            DbParameterCollection col = new DbParameterCollection();
            col.Add(DbConnection.SqlInputParam("@idRH", DbTipo.Entero, 0, idRH));
            col.Add(DbConnection.SqlInputParam("@fecha", DbTipo.Fecha, 0, fecha));

            this.DbConnection.RunDataSetProcedure(sql, col, CommandType.Text, out ds);
                        
            RecursoCalendario cal = new RecursoCalendario();
            
            if(ds.Tables[0].Rows.Count > 0)
            {
                DataRow fila = ds.Tables[0].Rows[0];            
                Cargar(fila, cal);

            }      
            
            return cal;
        }


        

    }
}
